package utils

import (
	"encoding/json"
	"haruhi/hiface"
	"io/ioutil"
)

/*
	存储有关haruhi框架的全局参数, 供其他模块使用,
	一些参数用户可以通过 json 文件来配置
*/

type GlobalObj struct {
	/*
		Server
	*/
	TcpServer hiface.IServer // 当前全局的server对象
	Host      string         // 当前服务器主机IP
	TcpPort   int            //当前服务器主机监听端口号
	Name      string         // 当前服务器名称

	/*
		Haruhi
	*/
	Version          string //当前版本号
	MaxPacketSize    uint32 // 数据包的最大值
	MaxConn          int    // 当前服务器主机允许的最大连接个数
	WorkerPoolSize   uint32 // 业务工作 worker 池的数量
	MaxWorkerTaskLen uint32 // 业务工作 worker 对应负责的任务队列最大任务存储数量
	MaxMsgChanLen    uint32 //

	/*
		config file path
	*/
	ConfFilePath string
}

var GlobalObject *GlobalObj

// 读取用户的配置文件
func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/haruhi.json")

	if err != nil {
		panic(err)
	}

	// 将 json 数据解析到 struct 当中
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

// 初始化
func init() {
	GlobalObject = &GlobalObj{
		Name:             "HaruhiServer",
		Version:          "V0.8",
		TcpPort:          7777,
		Host:             "0.0.0.0",
		MaxPacketSize:    4096,
		MaxConn:          12000,
		ConfFilePath:     "conf/haruhi.json",
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
		MaxMsgChanLen:    10,
	}
	GlobalObject.Reload()
}
